package cn.com.huzo.service.purchase;

import cn.com.huzo.model.entities.purchase.PoLinesEntity;
import huzofw.service.GenericManager;
import java.util.List;
import java.util.Map;

/**
 * 采购订单明细管理服务对象接口。
 *
 * @author 吴旭
 */
public interface PoLinesManager extends GenericManager<PoLinesEntity, String> {

    /**
     * 根据选定的订单得到满足条件的明细记录翻页数据
     *
     * @param criterion
     * @return
     * @throws java.lang.Exception
     */
    Map<String, Object> fetchForPageByPoNo(Map<String, Object> criterion) throws Exception;

    /**
     * 取得选择的订单全部明细ID
     *
     * @param criterion
     * @return
     * @throws Exception
     */
    List<String> fetchAllSelectedLines(Map<String, Object> criterion) throws Exception;

    /**
     * 更新订单明细。
     *
     * @param headerId 订单标识
     * @param updateddBy 更新者
     * @param currentUserId 当前用户
     * @param limit 订单明细每页显示数
     * @param pageIndex 订单明细当前页数
     * @param orderBy 订单明细排序方法
     * @param itemList 要删除的明细
     * @return 更新后的订单明细
     * @throws java.lang.Exception
     */
    Map<String, Object> updateLines(Long headerId, Long updateddBy,
            Long currentUserId, Integer limit, Integer pageIndex,
            String orderBy, List<PoLinesEntity> itemList) throws Exception;

    /**
     * 更新订单行的材料
     *
     * @param headerId 订单明细ID
     * @param updatedBy 更新者
     * @param currentUserId 当前用户
     * @param limit02 引入的调达表明细每页显示数
     * @param limit03 引入的补料单明细每页显示数
     * @param limit04 订单明细每页显示数
     * @param pageIndex04 订单明细当前页数
     * @param orderBy 订单明细排序方法
     * @param itemList 要更新的订单明细
     * @return 更新后的订单明细及相关引入数据
     * @throws Exception
     */
    Map<String, Object> updateRowMaterial(Long headerId, Long updatedBy, Long currentUserId,
            Integer limit02, Integer limit03, Integer limit04, Integer pageIndex04, String orderBy,
            List<PoLinesEntity> itemList) throws Exception;

    /**
     * 删除订单明细，并返回删除后的数据。
     *
     * @param linesId 要删除的订单明细ID
     * @param headerId 订单标识
     * @param deletedBy 删除者
     * @param currentUserId 当前用户
     * @param limit02 引入的调达表明细每页显示数
     * @param limit03 引入的补料单明细每页显示数
     * @param limit04 订单明细每页显示数
     * @param pageIndex04 订单明细当前页数
     * @param orderBy 订单明细排序方法
     * @return 删除后的订单明细及相关引入数据
     * @throws java.lang.Exception
     */
    Map<String, Object> deleteLines(String linesId, Long headerId,
            Long deletedBy, Long currentUserId,
            Integer limit02, Integer limit03,
            Integer limit04, Integer pageIndex04, String orderBy) throws Exception;

    /**
     * 批量删除订单明细。
     *
     * @param headerId 订单标识
     * @param deletedBy 删除者
     * @param currentUserId 当前用户
     * @param limit02 引入的调达表明细每页显示数
     * @param limit03 引入的补料单明细每页显示数
     * @param limit04 订单明细每页显示数
     * @param pageIndex04 订单明细当前页数
     * @param orderBy 订单明细排序方法
     * @param itemList 要删除的明细
     * @return 删除后的订单明细及相关引入数据
     * @throws java.lang.Exception
     */
    Map<String, Object> batchDeleteLines(Long headerId,
            Long deletedBy, Long currentUserId,
            Integer limit02, Integer limit03,
            Integer limit04, Integer pageIndex04, String orderBy,
            List<PoLinesEntity> itemList) throws Exception;
}
